#ifndef FSMFACTORY_HPP
#define FSMFACTORY_HPP
#include <string>
#include <fstream>
#include "Edge.hpp"
#include "Tokenizer.hpp"


class FSMFactory
{
    private:
	std::string pattern_;
	Edge* automaton_;
	Tokenizer* tokenizer_;
	
	FSMFactory();
	FSMFactory(const FSMFactory& other);
	FSMFactory operator=(const FSMFactory& lhs);

	void buildAutomaton();
	void printAndGo(Edge* edge,std::fstream& file);
	
    public:
	FSMFactory(const std::string& pattern, Edge* emptyEdge);
	static Edge* GetEmptyEdge();
	void DumpAutomaton();
};

#endif
